/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Logica.controladores;

import Logica.cuenta.Cuota;
import Logica.cuenta.DataCuota;
import Logica.usuario.Usuario;
import Persistencia.Persistencia;
import java.sql.Array;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;

/**
 *
 * @author maxi
 */
public class ControladorCuotas {
    
    static ControladorCuotas _instancia = null;
    private static List<Cuota> _listaCuotas = new ArrayList<>();
  
   private   int d = Calendar.DAY_OF_MONTH;
    private   int m = Calendar.MONTH;
    private   int a = Calendar.YEAR;
    public ControladorCuotas(){}
    
    public static ControladorCuotas getInstance(){
        if(_instancia == null) _instancia = new ControladorCuotas();
            return _instancia;
    }
   
    public void GuardarCuotaEnlista(Cuota c){
       _listaCuotas.add(c);
    }
    public void getCuotas() throws SQLException, ClassNotFoundException{
        List<DataCuota> lista = new ArrayList<>();
        Persistencia per = Persistencia.getInstance();
        lista = per.getCuotas();
        for(DataCuota c: lista){
          Cuota cuota = new Cuota(c.getPaga(),c.getMes(),c.getAnio(),c.getUsuario(),c.getFechaPago());
          _listaCuotas.add(cuota);
                               }
   }
   public List<Cuota> getListaCuota() {
        return _listaCuotas;
    }
   public void setListaCuota(Cuota c){
      _listaCuotas.add(c);
   }
   
   
    public List<DataCuota> convertir(List<Cuota> lista){
       List<DataCuota> ret= new ArrayList();
       for (Cuota c :lista){
           ret.add(new DataCuota(c.getUsuario(),c.getPaga(),c.getMes(),c.getAnio(),c.getFechaPago()));
       }
       return ret;
    }
    
   public boolean ControlCuotas(Cuota c) throws SQLException, ClassNotFoundException{
       List<DataCuota> li = new ArrayList<>();
       Persistencia per = Persistencia.getInstance();
       li = per.getCuotas();
        for(DataCuota cc: li){
            Cuota cuota = new Cuota(cc.getPaga(),cc.getMes(),cc.getAnio(),cc.getUsuario(),c.getFechaPago());
                if(c.getMes()== cuota.getMes()){
                        
                    return true;
                    }
                   }
                 return false;
                }
   
    public List<DataCuota> getCuotasPorUsuario(int codigo){
        List<DataCuota> li = new ArrayList<>();
        for (Cuota c: _listaCuotas){
            if(c.getUsuario().getCodigo()==codigo && c.getPaga()==false){
                li.add(new DataCuota(c.getUsuario(),c.getPaga(),c.getMes(),c.getAnio(),c.getFechaPago()));
            }
        }
        return li;
    }
   
    public List<DataCuota> getCuotasImpagas(int codigo){
        List<DataCuota> li = new ArrayList<>();
        for (Cuota c: _listaCuotas){
            if(c.getPaga()==false){
                li.add(new DataCuota(c.getUsuario(),c.getPaga(),c.getMes(),c.getAnio(),c.getFechaPago()));
            }
        }
        return li;
    }
    public List<Usuario> getTotalCuotasImpagas(){
        List<Usuario> li = new ArrayList<>();
        for(Cuota c: _listaCuotas){
            if(c.getPaga() == false){
                li.add(c.getUsuario());
            }
        }return li;
    }
    
    public List<Cuota> getCuoPorUsuario(int codigo){
        List<Cuota> li = new ArrayList<>();
        for (Cuota c: _listaCuotas){
            if(c.getUsuario().getCodigo()==codigo){
                li.add(new Cuota(c.getPaga(),c.getMes(),c.getAnio(),c.getUsuario(),c.getFechaPago()));
            }
        }
        return li;
    }
    
   public Cuota BuscarCuota(int mes,int anio, Usuario usr){
       Cuota ret = null;
       for (Cuota couta : _listaCuotas){
           if (couta.getMes()==mes && couta.getAnio()==anio && couta.getUsuario().getCodigo()==usr.getCodigo()){
               ret=couta;
           }
       }
       return ret;
   }
   public void CambiarEstadoCuota(Cuota c) throws SQLException, ClassNotFoundException{
    Persistencia per = Persistencia.getInstance();
    c.setPaga(true);
    this._listaCuotas.add(c);
    c.setFechaPago(c.getFechaPago());
    //c.getUsuario().agregarCuota(c);
    DataCuota dc = new DataCuota(c.getUsuario(),c.getPaga(),c.getMes(),c.getAnio(),c.getFechaPago());
    per.CuotaPagada(dc);
    
   }
   public boolean EliminarCuota(){
       
       return false;
       
   }
     
   public void GuardarCuota(Cuota c, Usuario u) throws SQLException, ClassNotFoundException{
       Persistencia per = Persistencia.getInstance(); 
       DataCuota dc = new DataCuota(u,c.getPaga(),c.getMes(),c.getAnio(),c.getFechaPago());
       per.GuardarCuota(dc);
            
    }
   public Cuota checkCuota(Usuario u) throws SQLException, ClassNotFoundException{
       ControladorUsuario cc = ControladorUsuario.getInstance();
       Calendar cal = new GregorianCalendar();
       int anio;
        Cuota aux = new Cuota();
        int a = cal.get(Calendar.YEAR);
        List <Cuota> n = new ArrayList();
        List <Cuota> l = this.getCuoPorUsuario(u.getCodigo());
        for (Cuota c: l){
            n.add(c);
        }
        anio=0;
        int mes=0;
        //aux = l.get(0);
        for(Cuota c : l){
            if(c.getAnio()>=anio){
                anio=c.getAnio();
            }
        }
        for(Cuota c: l){
            if(c.getAnio()<anio){
                n.remove(c);
            }
        }
        for(Cuota c : n){
            if(c.getMes()>= mes && c.getAnio()==anio){
                aux = c;
                mes=c.getMes();
            }
        } 
        return aux;
   }    
   
   public String retornarMes(int m){
       String mes = null;
      do{
       if(m == 0){ mes = "Enero"; return mes;}
       if(m == 1){ mes = "Febrero"; return mes;}
       if(m == 2){ mes = "Marzo"; return mes;}
       if(m == 3){ mes = "Abril"; return mes;}
       if(m == 4){ mes = "Mayo"; return mes;}
       if(m == 5){ mes = "Junio"; return mes;}
       if(m == 6){ mes = "Julio"; return mes;}
       if(m == 7){ mes = "Agosto"; return mes;}
       if(m == 8){ mes = "Septiembre"; return mes;}
       if(m == 9){ mes = "Octubre"; return mes;}
       if(m == 10){ mes = "Noviembre"; return mes;}
       if(m == 11) mes = "Diciembre"; return mes;}while(m <=11);
   
     
   }
   public String retornarPagoAlfabetico(boolean p){
       String pago = "";
       if(p == true){
           return pago= "Pagado";
       }return pago ="Impago";
   }

   


//    public boolean VerificarPagoDoble(Cuota c) throws SQLException, ClassNotFoundException{
//       List<DataCuota> li = new ArrayList<>();
//       Persistencia per = Persistencia.getInstance();
//       li = per.getCuotas();
//       for(DataCuota cuo: li){
//           Cuota cuota = new Cuota(cuo.getPaga(),cuo.getMes(),cuo.getAnio(),cuo.getUsuario());
//           if(c.getMes()== cuota.getMes() && c.getPaga() == cuota.getPaga() && c.getAnio() == cuota.getAnio()){
//            
//               return true;
//           }
//         }
//       return false;
//        
//   }
  
   
   
   
   
   
   
   
   
   
    
    
    
}
